package abstactClassInterfaceCodeKuai02;

public interface Swim {
    /*
    接口就是一种特殊的抽象类，里面全是抽象方法
    接口中的成员变量默认是public static final修饰的，成员方法默认是public abstract修饰的
    接口没有构造方法，不能创建对象
    接口可以多继承
    接口的实现类必须重写接口中的所有抽象方法，否则这个类必须是抽象类

    接口存在意义就是给多个子类中其中一些子类提供一个公共的方法
    */
    public abstract void swim();


   //接口中不存在变量，因为默认而且只能是public static final修饰
    public static final int NUM = 10;// int NUM = 10;


    //接口中的默认方法存在意义方便扩展后续功能(JDK8开始支持)
/*	接口中默认方法的定义格式： public default 返回值类型 方法名(参数列表）[]

    接口中默认方法的注意事项：
    1.默认方法不是抽象方法，所以不强制被重写
    2.public可以省略，default不能省略
    3.如果实现了多个接口，多个接口中存在相同名字的默认方法
      子类多继承这些接口的情况下就必须对该方法进行重写      */
    public default void run() {
        System.out.println("我是接口中的默认方法");
    }


    /*
    接口中静态方法的定义格式：
    格式:public static 返回值类型 方法名(参数列表）{ ]
    范例:public static void show() { ]

    接口中静态方法的注意事项:
    静态方法只能通过接口名调用，不能通过实现类名或者对象名调用 public可以省略，static不能省略
     */
    public static void show() {
        System.out.println("我是接口中的静态方法");
    }


    //当默认多个默认方法中都有重复的代码段，就可以把重复的代码段抽取出来
    private void method() {
        //默认方法中的重复代码段
    }

    //对静态方法中的重复代码抽取
    private static void method2() {
        //静态方法中的重复代码段
    }
	
/*	适配器设计模式说明
	
	1.当一个接口中抽象方法过多，但是我只要使用其中一部分的时候
	  子类不需要重写所以抽象方法时候，就可以适配器设计模式
	
    2. 书写步骤:
    编写中间类XXXAdapter 继承对应的接口
    对接口中的所有抽象方法进行空实现，让真正的实现类继承中间类，并重写需要用的方法
    为了避免其他类创建适配器类的对象，中间的适配器类 用abstract进行修饰 */
}
